www.gusucode.com > 基于Visual C++高级界面特效制作百例源码程序 > 基于Visual C++高级界面特效制作百例源码程序/code/char16/fontcombo/TipWnd.cpp

    // TipWnd.cpp : implementation file
//

#include "stdafx.h"
#include "TipWnd.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define FONT_HEIGHT -18

//////////////////////////////////////////////////////////////////////////
// ? Paramax Technology Limited                                         // 
// ----------------------------                                         //
//                                                                      //
// The author accepts no liablility for injury or loss of profits       // 
// if this software is used. You willingness to use this software       //
// indicates you accept total liability                                 //
//                                                                      // 
//////////////////////////////////////////////////////////////////////////


/////////////////////////////////////////////////////////////////////////////
// CTipWnd

CTipWnd::CTipWnd()
{
}

CTipWnd::~CTipWnd()
{
}

////////////////////////////////////////////////////////////////////////////////
//
// FUNCTION:	CTipWnd::Create
//
// DESCRIPTION:	Creates tip window based on Parent window
//
// INPUTS:		
//
// RETURNS:     
//
// NOTES:       
//
// MODIFICATIONS:
//
// Name			Date      Version	Comments
// N T ALMOND   25/09/98  1.0		Origin
//
////////////////////////////////////////////////////////////////////////////////
BOOL CTipWnd::Create(CWnd* pParent)
{

	return 	CWnd::CreateEx(0,
		AfxRegisterWndClass(0),
		NULL,
		WS_BORDER|WS_POPUP,
		0,
		0,0,0,
		NULL,
		(HMENU)0);

}


BEGIN_MESSAGE_MAP(CTipWnd, CWnd)
	//{{AFX_MSG_MAP(CTipWnd)
	ON_WM_ERASEBKGND()
	ON_WM_PAINT()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CTipWnd message handlers

////////////////////////////////////////////////////////////////////////////////
//
// FUNCTION:	CTipWnd::OnEraseBkgnd
//
// DESCRIPTION:	Called to paint background in infowindow color
//
// INPUTS:		
//
// RETURNS:     
//
// NOTES:       
//
// MODIFICATIONS:
//
// Name			Date      Version	Comments
// N T ALMOND   25/09/98  1.0		Origin
//
////////////////////////////////////////////////////////////////////////////////
BOOL CTipWnd::OnEraseBkgnd(CDC* pDC) 
{
	CBrush br(GetSysColor(COLOR_INFOBK));
	CRect rc;
	pDC->GetClipBox(rc);
	CBrush* pOldBrush = pDC->SelectObject(&br);
	pDC->PatBlt(rc.left,rc.top,rc.Width(),rc.Height(),PATCOPY);

	pDC->SelectObject(pOldBrush);

	return TRUE;
}

////////////////////////////////////////////////////////////////////////////////
//
// FUNCTION:	CTipWnd::ShowTips
//
// DESCRIPTION:	Shows tip window 
//
// INPUTS:		
//
// RETURNS:     
//
// NOTES:       
//
// MODIFICATIONS:
//
// Name			Date      Version	Comments
// N T ALMOND   25/09/98  1.0		Origin
//
////////////////////////////////////////////////////////////////////////////////
void CTipWnd::ShowTips(CPoint pt,const CString& str)
{
	CSize sz;
	CDC* pDC = GetDC();

	// Create new font if the selection has changed
	if (m_strFont != str)
	{
		m_strFont = str;

		LOGFONT lf;
		ZeroMemory(&lf,sizeof(lf));

		lf.lfHeight = FONT_HEIGHT;
		strcpy(lf.lfFaceName,m_strFont);
		
		// Delete old font
		m_font.DeleteObject();
		m_font.CreateFontIndirect(&lf);
		

		CFont* pFont = pDC->SelectObject(&m_font);

		// String demensions of font on screen 
		sz = pDC->GetTextExtent(m_strFont);

		// Give some space round the font
		sz.cx += 8;
		sz.cy += 8;

		pDC->SelectObject(pFont);
		ReleaseDC(pDC);

		SetWindowPos(0,pt.x,pt.y,sz.cx,sz.cy,SWP_SHOWWINDOW|SWP_NOACTIVATE);
		RedrawWindow(); // Force immediate redraw
	}
}



void CTipWnd::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	dc.SelectObject(&m_font);
	CRect rc;
	GetClientRect(rc);
	dc.DrawText(m_strFont,rc,DT_SINGLELINE|DT_VCENTER|DT_CENTER);
	// Do not call CWnd::OnPaint() for painting messages
}